package com.itheima;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.function.Consumer;

/**
 * 1.构造函数
 * ---1.ArrayList()
 *
 * 2.成员方法
 * ---1.add(Object obj)
 * ---2.add(int index,Object obj)
 * ---3.remove(int index)
 * ---4.get(int index)
 * ---5.set(int index,Object obj)
 * ---6.size()
 * ---7.clear()
 * ---8.contains(Object obj)
 *
 */
public class ArrayListDemo {

    public static void main (String[] args){
        //1. 创建ArrayList对象
        ArrayList<String> list = new ArrayList<String>();//创建ArrayList对象,用泛型限制集合中存储的数据类型为String

        //2. 往ArrayList集合中添加数据
        list.add("hello");
        list.add("world");
        list.add("java");
        //3. 往ArrayList集合中添加数据，指定索引
        list.add(1,"javaSE");
        //4. 获取ArrayList集合中指定索引的数据
        String s = list.get(0);
        System.out.println("获取的数据为："+s);
        //5. 修改ArrayList集合中指定索引的数据
        list.set(1,"111");
        //6. 删除ArrayList集合中指定索引的数据
        list.remove(0);
        System.out.println(list);
        list.add("zhang");
        list.add("wang");

        System.out.println("----for循环遍历--------------------------------------------------------");

        //1. for循环遍历ArrayList集合
        for (int i = 0; i < list.size(); i++) {
            String obj = list.get(i);
            System.out.println(obj);
        }
        System.out.println("----增强for循环遍历------");
        //2. 增强for循环遍历ArrayList集合
        for (String obj : list) {
            System.out.println(obj);
        }
        System.out.println("----迭代器遍历------");
        //3. 迭代器遍历ArrayList集合
        Iterator<String> iterator = list.iterator();//获取 list 集合的迭代器对象，用于遍历集合中的元素。

        while (iterator.hasNext()) { //使用 hasNext() 方法判断集合中是否还有下一个元素。
            String next = iterator.next();//使用 next() 方法获取集合中的下一个元素
            System.out.println(next);
        }
        System.out.println("----Lambda表达式------");
        //4. Lambda表达式
        list.forEach(System.out::println);
        //等同于     list.forEach(str -> System.out.println(str));

        System.out.println("-----------------------------------------------------------");
        //匿名内部类
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String name) {
                System.out.println(name);
            }
        });
        //Lambda表达式
        list.forEach(name -> System.out.println(name));
        //方法引用
        list.forEach(System.out::println);
    }

}
